home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
util1
/
ramxv109.lha
/
RAMxV1.0
/
RAMx.doc
< prev
next >
Wrap
Text File
|
1995-11-13
|
23KB
|
526 lines
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ +
+ RAMx Version 1.09 +
+ +
+ Copyright ©1995 Ian Dixon and IvanCo Software. +
+ +
+ All rights reserved. +
+ +
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Author note:
------------
The development of this version of RAMx is being discontinued because
of various cosmetic compatibility problems with the 2.0+ operating
systems and a few other reasons. (Examples: a mysterious white bar at
the bottom of the display when the window is selected, and not liking
to be run in environments where Topaz 8 is not the system font.)
The next release, 2.0, will be available sometime early next year; I am
completely rewriting the interface under gadtools.library.
Also, there are a very few inconsistencies between this doc file and the
program, mostly because of this interface mess. (Yeah, I know; don't
design yer program by editing the doc file first!) For example, if you
wanted to write hexadecimal 1A as a shortword, instead of entering %1a in
the writestring gadget, you should enter $001a. In any case, just use
'#' for decimal writes and '$' for hexadecimal (not !,@,%, or ^.), adding
zero placeholders when necessary. However, the symbols for decimal
numbers will work for searches. For example, !50 is a valid search
parameter for finding the decimal value 50 on a byte. A few of the keys
in the keychart have also not been implemented. These include returning
from a jump (Amiga-J), ASCII chart (A), and the Editor (E).
One other thing: there just *might* be an easter egg (hidden fun but not
useful feature) hidden within RAMx. I'd offer a clue, but "there is no
help left."
***************************************************************************
RAMx V1.09 by Ian Dixon
***************************************************************************
RELEASE NOTES:
Version: Date: Notes:
---------------------------------------------------------------------------
0.0 07-12-89 First roots as BASIC memory lister. Idea for
graph...various unfinished BASIC and C versions
...
0.87 10-20-94 Pre-release. Finally got around to finishing
most of assembly version. Still a few quirks,
such as lack of command line interface,
and tying up the CLI or whatever launched
it.
0.92 11-01-94 Fixed decimal conversion. Added gadget updates
(press U or click DecGads). Added line on top
of graph to show range from cursor to endmarker.
1.09 11-13-95 Cleaned up a bit. Final release until almost
fully rewritten version 2.0. CLI interface works,
and Workbench launching no longer crashes on
exit. (My first Aminet release ever [sniff..])
---------------------------------------------------------------------------
***************************************************************************
LEGAL JARGON:
This program is Copyright ©1995 by Ian Dixon. All rights reserved. RAMx
is a freeware program. However, donations and acknowledgements will be
gratefully accepted.
RAMx is freely redistributable, meaning you may distribute it, provided this
archive is intact and unaltered, compression excepted, and no copying fee is
charged. It is not to appear on any commercial release or commercial
freeware/shareware compilation without my written consent. I hereby give
permission to Fred Fish and the compilers of the Aminet CD-ROMs.
NO LIABILITY IS ASSUMED FOR DAMAGES RESULTING FROM THE USE OR ABUSE OF THIS
PROGRAM OR ANYTHING INCLUDED.
***************************************************************************
WHAT IS RAMx?
RAMx is a graphical, full-featured memory editor written entirely in
assembler. Because it can alter memory, it can do nearly anything, like:
* Recover most or all of lost files still in RAM (i.e. an unsaved
text file in an editor when a crash occurs.)
* Cheat on games
* Alter running programs
* Edit system structures
* "Rip" text from demos and games (how many *text* rippers do you have?)
For example, ripping the text from PAL demos which is not visible on a
NTSC display.
SYSTEM REQUIREMENTS
Theoretically, RAMx should run on any Amiga with any configuration, because
I wrote it with all 680X0 chips in mind and didn't "cheat". If you do have
problems, write to me with your system specs, and I'll try to figure out
what's up. If you have a 68040 with copyback on, you may not be able to
use any RAM-altering functions because RAMx writes directly to memory.
Turn the copyback mode off to write to memory.
LOADING RAMx
Load RAMx like any other program: Workbench, CLI, or any other method.
To install RAMx on a hard drive, or anywhere else, drag the icon to
wherever you want to keep it, or copy the file and .info icon. It is
entirely self-contained and can load from anywhere you copy it, with
the obvious exception of "NIL:" ... ;-)
USING RAMx
The first thing you will probably notice is the graph at the top of the
screen. This is a visual representation of the memory area starting at the
address in the GraphAdd gadget. The InfoBox is the wide blue rectangle at
the bottom of the screen. This displays information about the graph and
cursor, ASCII character codes, or a keychart.
If you understand how addresses of memory work, skip ahead to the asterisks.
Crash course in Digital 101:
Each address of memory is like a mailbox containing a value from 0 to 255
(or $00 to $FF in hexadecimal). This is referred to as a byte. The
addresses are numbered, from 0 to infinity. The addresses available depend
on how much memory your computer has and 'where' the memory boards are
connected. The values in all of the addresses but those in the ROM chip
can be changed. This is how the computer stores data, such as programs,
screen image data, RAM disk files, and anything else that is stored on the
Mysterious Medium of Memory.
The computer can use 2 or 4 addresses at once to enable the storage of
larger numbers. To avoid confusion, just remember that this is the same
as using decimal places. For example, suppose address 2 stores the value
$FF and address 3 stores $00. When read separately, 2 contains 255 and 3
contains 0. When read together, they hold the value $FF00, or 65280 using
the decimal system. Two addresses read together contain a shortword, or
word, valued from 0 to 65535. Four addresses read together contain a
longword, valued from 0 to 4294967296! A long or short word must be
located at an even-numbered address, unless you are using RAMx, which reads
and writes them byte-by-byte. However, a longword or shortword read at
an odd address rarely has meaning or practical value.
Hexadecimal - number system based on 16 instead of 10 (decimal). Digits
are 0-9, A-F. A is 10, B is 11, etc. The places are valued
1st, 16th, 256th, 4096th, etc. where the value of place X
equals 16^X multiplied by the digit. (get that?)
Example: $4A9F
4 4 times 16^3 or 4096 = 16384
A 10 times 16^2 or 256 = 2560
9 9 times 16^1 or 16 = 144
F 15 times 16^0 or 1 = 15
-----
$4A9F = 19103
* * * * * *
--------------------------- Program Functions: ---------------------------
1. The Graph
The graph at the top of the screen is a function graph. If the graph
starts at address #0, it is a function graph from address #0 to address
#639 ($27F). Each pixel on the X axis is an address. The Y axis is the
byte value at that address, divided by 4 to save screen space. The top
has the value 0-3 and the bottom the value #252-#255 ($FC-$FF).
I used this method to show more data on the screen than is possible with
address numbers and values and to make it easier to visually scan a
relatively large amount of data at once.
To move the graph, enter an address in the StartAdd gadget, (See Search
for the format.) press the -/_ and +/= keys, which move it a screen at a
time, or press (J)ump to place the graph at the address stored at the
cursor, if it's legal. Or, enter an address in the LeftAdd gadget to
move between that and 32K onward using the proportional gadget under the
graph. To keep your place, press (S)ave Place, and to go back to this
place, press (R)eturn. The address of the graph is displayed in the
Infobox.
2. The Cursor
The cursor is the pixel visible above the graph. If it is not at an
address on the visible portion of the graph, it will not appear. However,
it can still be used and moved as if it were still visible. The cursor can
be moved by clicking on the graph with the right mouse button, entering a
value in the CursorAdd gadget, or using the cursor keys. Left and right
move it respectively up and down a byte at a time, and up and down move it
a longword at a time. Information about the cursor, including the address,
byte, word, longword, and 8 characters of text are shown at the bottom left
of the Infobox. The cursor marks the beginning of the search, write,
replace, and data dump functions.
3. Search
This is a powerful function within RAMx that allows you to search through
memory. Enter the data to search for in the SearchString gadget in the
following Simple & Easy Format, place the cursor, enter a stop address in
EndRange, and click the Search gadget.
String - Just enter the string, but if it begins with a "#" or
a "$", leave it off, or RAMx will think it's a number.
If you know it lies on an even address, you can more than
double the search speed by selecting the WordStr gadget
or the "String search even only" menu. This only works
for strings; all bytes are searched for on odd or even
addresses, and words and longwords on even addresses.
Decimal - Enter a symbol followed by the number:
! byte
@ word
# longword
Hexadecimal - Enter a $ followed by the hex digits.
If you enter some weird, impossible number, RAMx will flash and refuse the
search. If it's found, RAMx will place the cursor at the first byte of
the search and the graph 64 bytes behind.
For example, suppose you wanted to find a shortword that contains the number
$FC. You would enter
%FC
in the SearchString gadget and click the Search gadget. If and when it is
found, the cursor will jump to the first byte, or in this case, $00. The
graph would jump to the address 50 bytes before the first byte. RAMx would
not jump to $FC because it was searched for as a shortword. If a longword
or shortword are searched for, RAMx will only search on even addresses,
although it will permit the writing of them on odd addresses.
RAMx can address exactly 4 gigabytes of address space ($00000000 - $FFFFFFFF),
so even if you've got a lot of RAM, you're covered. Be careful, though:
if you attempt to read certain addresses in the Amiga's custom chips it will
modify their register values and probably crash the machine.
4. Write
To write data to memory, enter it in the WriteString gadget in the Search
format, place the cursor, and click the Write gadget. I do NOT advise
writing over ANYTHING in the 0-639 range, or anything you're not sure of,
because you might just reset your computer or crash your system. (Read:
ScreenMode=FIREWORKS_DISPLAY.) It won't hurt anything, but it can wipe
out important unsaved items in memory or on ramdisk. (Read "Legal Jargon"
for "I Warned You" disclaimer) To write a longword or a shortword, place
the cursor at the beginning address you want the number to occupy. It
is possible, though not often useful, to write a short or longword at an
odd address using RAMx, even though the 680x0 CPU refuses to do so.
5. ReadText
This is a feature that allows a quick reading of text. Click with the left
mouse button on the graph where you want to begin reading, and hold it
down. The text will scroll across at the very bottom left of the Infobox,
and a line will scroll across the cursor area denoting the area of memory
you are reading. Any bytes not representing text will appear as periods
or spaces, depending on the state of the SPC/"." gadget. If it is
highlighted, it will be a period, otherwise, a space. The speed can be
adjusted with the slider gadget at the bottom right of the screen.
6. Data Dumps
Data dumps "dump" data from memory to disk, or many AmigaDOS devices.
There are 3 types of data dumps. The raw dump copies the byte values from
memory without any type of formatting or any other changes. Text dumping
finds strings of text of the length specified in "TextLength" and writes
the address (in hex) and text to the file. Hex dumping writes hex address
numbers and bytes in the format below.
Set the cursor and EndRange around the area you wish to dump and click on
a dump gadget. A "requester" will appear. Enter the desired filename or
device name. Some valid devices are PRT:, PAR:, NEWCON:, CON:, RAW:, NIL:,
SER: and there may be others that work.
The format of the hex dump:
Address Data Text
---------------------------------------------------------------------------
$00C03D40 02 8C 52 41 4D 78 56 32 2E 30 20 62 79 20 49 61 ..RAMxV2.0.by Ia
$00C03D50 6E 20 44 69 78 6F 6E 00 00 D3 12 5E 76 33 FF 01 n Dixon..".^v3..
The format of the text dump:
Address Text
---------------------------------------------------------------------------
$00C03D42 RAMxV2.0 by Ian Dixon
$00C03F37 File-System
7. Miscellaneous Small Functions to Make Life Easier
7.1 Place Saving (S,R,I)
This function stores the current graph and cursor positions. To Save
your place, press S. You are free to go elsewhere. To Restore your
position, press R. To swap the current and saved positons, press I.
7.2 Graph and Cursor Movement
The - and = keys will move the graph 640 bytes to the left or right.
The [ and ] keys move it 64 bytes, respectively. The cursor keys can
be used to place the cursor instead of the gadget: Left and right move
it by one byte, and up and down move it by the longword. Another less
precise method is to click on the graph with the right mouse button.
To move the graph 64 bytes behind the cursor, press P.
7.3 Jumping Around
This function can be really handy when tracing through system
structures. To Jump the graph and cursor to the address contained at
the longword under the cursor, press J. I won't promise anything, but
if the address is not part of RAM or ROM, it probably won't jump there.
No promises; the checker is anything but foolproof. To return to where
you were before the jump, press Amiga-J.
7.4 Keychart
The Help key or K will display a keychart. The keychart can also be
toggled by clicking on the InfoBox with the right mouse button. The
Q key will scroll upward and the A key downward through either chart,
or just click with the left mouse button on the top and bottom of the
InfoBox. To go back to the normal InfoBox, press ESC or click on it
again with the right mouse button.
7.5 Text Block Search
Enter a length to search for in the TextLength gadget and click the
SrchTxt gadget.
7.6 Fill Area *not implemented yet
Enter the data to fill with in WriteString. (This can be anything BUT a
string) Enter stop and start addresses in StartRange and Endrange.
Then press F for Fill Area and select the "Yes" gadget.
7.7 Workbench Pointer
Press W to call OpenWorkBench() and place the cursor and graph at the
address of the Workbench screen. If the Workbench is not present and
cannot be re-opened, it will "jump" to 0.
7.8 E-Key text editor * not implemented yet
Place the cursor and press E to type in text. The cursor will move as
you type, possibly off the screen. (keep going anyway, if needed) The
27 characters of text before the cursor can be seen at the lower left
corner of the InfoBox.
Editor Keychart:
Backspace - Moves cursor one byte to left
CursorKeys - Left and right move cursor one byte respectively
Return - Insert a returncode ($0A)
Left Alt - Insert a null byte
Esc - Quit the editor
7.9 Miscellaneous Among Miscellaneous
There are numerous other functions too small to necessitate a section
to document them. These are listed in the Keychart.
8. Keychart
Here are all of the keyboard/mouse functions. Some are not documented above.
---------------------------------------------------------------------------
Q - Scroll infoBox chart up Cursor Right - cursor 1 byte to right
A - Scroll infoBox chart down Cursor Left - cursor 1 byte to left
D - Editor* Cursor Up - cursor 1 long to right
U - Update address gadgets Cursor Down - cursor 1 long to left
G - Regraph RgtAmiga/J - return from Jump*
I - Swap C/G pos. with (S)aved RgtAmiga/Q - QUIT!
J - Jump to longword at cursor RgtMouseBtn - place cursor at pointer
K - (K)eychart MidMouseBtn - EndRange at pointer(?)
P - (P)lace graph at cursor LftMouseBtn - ReadText at pointer (hold)
R - (R)eturn to saved position Help - KeyChart
C - ASCII chart* E - EndRange at cursor address
S - Save cursor/graph Position ESC - Reset InfoBox Cursor/Graph
Z - Write null byte at cursor W - Cursor at Workbench ptr
[ - Graph 64 bytes to left ] - Graph 64 bytes to right
- - Graph 640 bytes to left = - Graph 640 bytes to right
Keys marked with '*' not implemented yet... :/
===========================================================================
UPGRADES! UPGRADES!
If you like this program and would like to receive a copy of the current
version, just send $5.00 in the US or $6.00 from overseas in American funds
to the following address along with your name and address. Money orders are
preferred. You will receive the latest revision of RAMx, and the (messy)
source if you request it, and any small utilities I write and release to
the public domain on a high-quality disk. Feel free to donate any extra
alms for a starving programmer...
Ian M. Dixon
#7 Allegheny Center
Apt 403
Pittsburgh, PA 15212
Questions, comments, and complaints are encouraged, not to mention free!
If you have trouble getting RAMx to run on your system, write me and
include your system setup, hardware, and an explanation of the exact
problem. I will try to straighten things out. I can also be reached
over Internet at:
zorak@telerama.lm.com
and on IRC as "zorak"
===========================================================================
Possibilities for Future Revisions: (* Will almost certainly happen.)
1. Zoomable graph - able to specify end as well as beginning of graph
*2. Dynamic graphing - graphing over and over to observe changes over time
*3. Rewriting - keep writing values at a certain list of addresses
*4. Load, edit, and save files
*5. Monitoring a list of addresses for byte changes
6. "Clickable" chart of memory boards and ability to select a RAM board to
search or save.
*7. The admittedly flaky interface will be implemented in MUI (Magical User
Interface,) or gadtools.library. Sorry, 1.3/512K users, but it's
high time to upgrade!
8. A built-in graphics ripper (A graphics ripper can find images in RAM
and save them to an IFF file, even after the
program has been exited or "erased" by a
system reboot in many cases.)
===========================================================================
Possible future releases, all in assembly:
UMAC (Universal Macros)
A macro utility that will generate macros for any Intuition program
by recording keystrokes, gadget/menu selections, and mouse actions.
Life *
Yet another engine for the Game of Life (cellular automata). Nearly
complete; will probably be released if I ever get around to Amiga-tizing
the interface... 8-}
Anibots **
Create your own societies of self-replicating virtual robots using a
language simpler than BASIC. Will include genetic mutation abilities.
Nearing completion.
* Life written by Ian Dixon and Gary Galland.
** Anibots conceived and designed by Ian Dixon. Written by Gary Galland.
--------------------------------------------------------------------------
My canonical thanklist of the highly esteemed is as follows:
(in no order whatsoever)
--------------------------------------------------------------------------
Gary Galland ----- for being my college roomie, debug help, muchas ideas,
and BEER
Doug Bennett ----- for being my college roomie, an Amiga to develop on while
mine was down (about 5 months), and CHILI
Ken Wright ------- for the best BBS in town, testing, and RAM
Mike Wood -------- for fast search routine suggestions, sage Amiga
assembly advice, and RADIOLOGY
Billy Williams --- for moral support, elec. guitar lessons, and PITTSBURGH
Carey Clevenger -- for ideas, movies, and MORTAL KOMBAT II
Commodore & crew - for the best damn computer available today, and
MULTITASKING (Sayonara! You will be missed!)
David Letterman -- for Late Night coding breaks, laughs, and CANNED HAM
- - -
A special thanks to everyone in the list before Commodore for putting up
with me over the years. (Mike Wood or Ken Wright from Vienna, if you're
reading this, drop me a line sometime soon, either over Internet or
Snailnet...)
*Absolutely* no thanks to Microsoft, IBM, Apple, 7-Eleven, Rush Limbaugh,
DeVry Institute of Technology in Columbus OH, Hardee's, Miss Ball (my 4th
grade teacher), the Lamer Exterminator II virus, which destroyed about a
week's worth of coding, or Tipper Gore, censorshit advocate.
--------------------------------------------------------------------------
MCP: End of line.